﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAO.Bussiness.Repository;
using DAO.Model;

namespace Restaurante
{
    public partial class reservasHechas : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            lblError.Text = "";
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("home.aspx");
        }

        protected void btnAcpetar_Click(object sender, EventArgs e)
        {
            ComandaRepository cr = new ComandaRepository();
            Comanda com = new Comanda();

            Usuario usu = new Usuario();
            UsuarioRepository ur = new UsuarioRepository();
           

            Mesa m = new Mesa();
            MesaRepository mr = new MesaRepository();

            ReservaRepository rr = new ReservaRepository();
            Reserva reserva = new Reserva();    

            bool error = false;
            if (txbReserva.Text == "")
            {
                lblError.Text = "Debe seleccionar un cliente !!!.";
                return;
            }
            Int32 nro = Convert.ToInt32(txbReserva.Text);
            reserva = rr.GetBy(u => u.Nro_Reserva.Equals(nro)).Single();

            try
            {
                if (ddlEstado.SelectedItem.ToString() == "Confirmada")// seleccion Confirmada
                {
                    if (Convert.ToInt32(ddlMozo.SelectedItem.Value) == 0)
                    {
                        lblError.Text = "Debe seleccionar un Mozo !!!.";
                        return;
                    }
                    m = mr.GetBy(u => u.Id_Mesa.Equals(reserva.Id_Mesa)).Single();
                    m.Id_Estado = 7;
                    mr.Update(m);
                    mr.Save();

                    com.Id_Cliente = reserva.Id_Cliente;
                    com.Id_Mesa = reserva.Id_Mesa; //Convert.ToInt32(ddlMesa.SelectedItem.Value);
                    com.Id_Estado = 4; // Comanda abierta
                    com.fecha = System.DateTime.Now;
                    Int32 cod = Convert.ToInt32(ddlMozo.SelectedItem.Value);

                    usu = ur.GetBy(u => u.Id_Usuario.Equals(cod)).Single();
                    usu.Comandas.Add(com);
                    reserva.Id_Estado = 8;
                    rr.Update(reserva);
                    rr.Save();
                    ur.Update(usu);
                    ur.Save();
                //    CleanControl(this.Controls);
                    Response.Redirect("reservasHechas.aspx");
                }
                else if (ddlEstado.SelectedItem.ToString() == "Perdida") // seleccion Perdida
                {
                    reserva.Id_Estado = 10;
                    rr.Update(reserva);
                    rr.Save();

                    m = mr.GetBy(u => u.Id_Mesa.Equals(reserva.Id_Mesa)).Single();
                    m.Id_Estado = 5;
                    mr.Update(m);
                    mr.Save();

                  //  CleanControl(this.Controls);
                    Response.Redirect("reservasHechas.aspx");
                }
            }
            catch (Exception ex)
            {
                error = true;
            }
            finally
            {
                if (error)
                    lblError.Text = "Error durante la grabación !!!.";



            }
        }
        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is Calendar)
                    ((Calendar)control).SelectedDate = System.DateTime.Now;
                else if (control.HasControls())
                    //Esta linea detécta un Control que contenga otros Controles
                    //Así ningún control se quedará sin ser limpiado.
                    CleanControl(control.Controls);
            }
        }

        protected void gridReservas_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridViewRow row = gvReservas.SelectedRow;
            txbCliente.Text = row.Cells[4].Text;
            txbReserva.Text = row.Cells[1].Text;
        }
    }
}